import axios from 'axios';
import { Message, MessageBox } from 'element-ui';
import store from '../store';
import { getToken } from '@/utils/auth';
import qs from 'qs';

// 创建axios实例
const service = axios.create({
	baseURL : process.env.BASE_API, // api的base_url
	timeout : 5000, // 请求超时时间
    // headers: {
    //     // 跨域请求 这个配置不能少
    //     "Content-Type": "application/x-www-form-urlencoded;charset=UTF-8",
    //     'Accept': 'application/json'
    // }
});

// request拦截器
service.interceptors.request.use(config => {
	// config.data = qs.stringify(config.data);
	// config.data = JSON.stringify(config.data);
	// config.headers['Content-Type'] = 'application/x-www-form-urlencoded';	
	if (store.getters.token) {
		config.headers['X-CSRF-TOKEN'] = getToken(); // 让每个请求携带自定义token 请根据实际情况自行修改
	}
	return config;
}, error => {
	// Do something with request error
	console.log(error); // for debug
	Promise.reject(error);
})

// respone拦截器
service.interceptors.response.use(
	response => {
		const res = response.data;
		if (res.code === 1701 || res.code === 1702) {
			MessageBox.confirm('认证TOKEN已失效，请重新登陆', '确定登出', {
				confirmButtonText : '重新登录',
				showCancelButton : false,
				type : 'warning'
			}).then(() => {
				store.dispatch('FedLogOut').then(() => {
					location.reload(); // 为了重新实例化vue-router对象 避免bug
				});
			})
			return Promise.reject('');
		} else {
			return response.data;
		}
	},
	error => {
		console.log('err' + error); // for debug
		Message({
			message : error.message,
			type : 'error',
			duration : 5 * 1000
		});
		return Promise.reject(error);
	}
)

export default service;